package com.huwei.activemq.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: 胡伟
 * @Date: 2021/1/19 10:31
 * @Description:
 */

/**
 * 作为rabbitmq 来讲，其架构为交换机与队列，交换机是接收客户端消息并转发存放到队列中
 * 故此处应当配置交换机的名称和队列名称，并且需要绑定相对应的交换机与队列，一个交换机和多个队列可以绑定
 */
@Configuration
public class RabbitMqConfig {
    @Bean
    public Queue initQueue(){
        // 以下为Queue初始化队列参数说明
        // durable:是否持久化,默认是false,持久化队列：会被存储在磁盘上，当消息代理重启时仍然存在，暂存队列：当前连接有效
        // exclusive:默认也是false，只能被当前创建的连接使用，而且当连接关闭后队列即被删除。此参考优先级高于durable
        // autoDelete:是否自动删除，当没有生产者或者消费者使用此队列，该队列会自动删除。
        // 例如return new Queue("TestDirectQueue",true,true,false);
        //一般设置一下队列的持久化就好,其余两个就是默认false
        return new Queue("huwei");
    }
//    @Bean
//    public Queue initQueue1(){
//        return new Queue("huwei1");
//    }
    @Bean
    public DirectExchange initDirectExchange(){
        //以下为构造参数说明
        //参数1为交换机名称,参数2为是否持久化,承诺书3为若没有生产和消费者连接 是否删除该交换机
         return new DirectExchange("jiahong",true,false);
    }
    @Bean
    public TopicExchange initTopicExchange(){
        return new TopicExchange("jiahong1",true,false);
    }
    @Bean
    public Binding initBingding(){
        //绑定 将队列和交换机绑定, 并设置用于匹配键：xiaojiang,
        //注意，若一个交换机绑定多个队列的时候，会导致一条消息消费两次
        return BindingBuilder.bind(this.initQueue()).to(this.initDirectExchange()).with("xiaojiang");
    }
//    @Bean
//    public Binding initBingding1(){
//        return BindingBuilder.bind(this.initQueue1()).to(this.initDirectExchange()).with("xiaojiang");
//    }
}
